package com.example.smartwaterapi.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.smartwaterapi.entity.Device;

import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * 设备服务接口
 */
public interface DeviceService extends IService<Device> {

    /**
     * 根据设备序列号获取设备
     */
    Device getByDeviceSn(String deviceSn);

    /**
     * 根据用户ID获取设备列表
     */
    List<Device> getByUserId(Long userId);

    /**
     * 绑定设备到用户
     */
    boolean bindDevice(Long userId, String deviceSn, String deviceName);

    /**
     * 绑定设备到用户（完整参数版本）
     */
    boolean bindDevice(Long userId, String deviceSn, String deviceId, String macAddress, String deviceName, 
                      String model, Integer batteryLevel, Integer currentVolume, 
                      Double waterTemperature, String deviceTimezone, String deviceToken,
                      String edrAddress, String bleAddress);

    /**
     * 解绑设备
     */
    boolean unbindDevice(Long userId, String deviceSn);

    /**
     * 删除用户设备
     */
    boolean deleteUserDevice(Long userId, String deviceSn);

    /**
     * 更新设备在线状态
     */
    boolean updateOnlineStatus(String deviceSn, boolean isOnline);
    
    /**
     * 异步更新设备在线状态
     */
    CompletableFuture<Boolean> updateOnlineStatusAsync(String deviceSn, boolean isOnline);

    /**
     * 更新设备电量
     */
    boolean updateBatteryLevel(String deviceSn, Integer batteryLevel);

    /**
     * 更新设备水量和水温
     */
    boolean updateWaterStatus(String deviceSn, Integer currentVolume, Double waterTemperature);

    /**
     * 更新设备设置
     */
    boolean updateDeviceSettings(Long deviceId, Object settings);
    
    /**
     * 批量更新设备状态
     */
    boolean batchUpdateDeviceStatus(List<Device> devices);
    
    /**
     * 更新设备表盘背景URL
     */
    boolean updateDialBackgroundUrl(String deviceSn, String dialBackgroundUrl);
    
    /**
     * 根据用户ID查找用户的主设备（第一个绑定的设备）
     */
    String findUserPrimaryDevice(String userId);
    
    /**
     * 智能更新设备表盘背景URL - 支持多种设备标识符
     */
    boolean smartUpdateDialBackground(String userId, String deviceId, String deviceSn, String dialBackgroundUrl);
}